package ULHT.LIG2N1.RC.SERVER;

import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ConsolaServidor {

    public static void main(String[] args) {
        boolean isRunning = false;
        int opcao = -1;
        ServerThread s = new ServerThread();

        do {
            opcao = menu();
            switch (menu()) {
                case 1:
                    if (!isRunning) {
                        s.start();
                        if (s.isAlive()) {
                            isRunning = true;
                        } else {
                            isRunning = false;
                            System.out.println("Erro ao iniciar o servidor");
                        }
                    } else {
                        System.out.println("O servidor já está a correr...");
                    }
                    break;
                case 2:
                    if (isRunning) {
                        if (s.isInterrupted()) {
                            s.notify();
                        } else {
                            try {
                                s.wait();
                            } catch (InterruptedException ex) {
                                Logger.getLogger(ConsolaServidor.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                    } else {
                        System.out.println("O servidor não está a correr...");
                    }
                    break;
                case 3:
                    if (isRunning) {
                        s = null;
                        s = new ServerThread();
                        s.start();
                        if (s.isAlive()) {
                            isRunning = true;
                        } else {
                            isRunning = false;
                            System.out.println("Erro ao reiniciar o servidor");
                        }
                    } else {
                        System.out.println("O servidor não está a correr...");
                    }
                    break;
                case 4:
                case 0:
                    if (isRunning) {
                        s = null;
                        if (!s.isAlive()) {
                            isRunning = false;
                            System.out.println("Servidor parado");
                        } else {
                            System.out.println("Erro ao parar o servidor");
                        }
                    }
            }
        } while (opcao != 0);
    }

    private static int menu() {
        boolean isValid = true;
        int option = -1;
        Scanner input;
        System.out.println("**** CONSOLA DO SERVIDOR ****\n");
        System.out.println("1 ----- Start");
        System.out.println("2 ----- Pause");
        System.out.println("3 ----- Restart");
        System.out.println("4 ----- Stop\n");
        System.out.println("5 ----- Refresh ao menu");
        System.out.println("0 ----- Sair\n");
        do {
            if (!isValid) {
                System.out.println("\nOpção inválida, digite 1, 2, 3, 4, 5 ou 0");
            }
            System.out.print("Escolha uma opção : ");
            try {
                isValid = false;
                input = new Scanner(System.in);
                option = input.nextInt();
                if (option >= 0 && option <= 5) {
                    isValid = true;
                }
            } catch (InputMismatchException ex) {
                option = -1;
            }
        } while (!isValid);
        return option;
    }
}
